function ListNode(val, next = null) {
    this.val = (val === undefined ? 0 : val);
    this.next = next;
}

var mergeTwoLists = function (list1, list2) {
    // 创建一个哑节点  
    let dummy = new ListNode(0);
    let cur = dummy; // cur 初始化为哑节点  

    while (list1 && list2) {
        if (list1.val <= list2.val) {
            cur.next = list1;
            list1 = list1.next;
        } else {
            cur.next = list2;
            list2 = list2.next;
        }
        cur = cur.next; // 移动 cur 到下一个节点  
    }

    // 如果 list1 还有剩余节点，将它们连接到结果链表的末尾  
    if (list1) {
        cur.next = list1;
    }
    // 如果 list2 还有剩余节点（注意这里不需要 else，因为上面的 if 已经处理了 list1 不为空的情况）  
    if (list2) {
        cur.next = list2;
    }

    // 返回哑节点的下一个节点，它是合并后的链表的头节点  
    return dummy.next;
};